/**
 * @file salesanalysisdao.h
 * @brief 销售分析数据访问层头文件
 * @details 提供销售分析页面所需的各种统计数据查询功能
 * @author 超市管理系统开发团队
 * @date 2025
 */

#ifndef SALESANALYSISDAO_H
#define SALESANALYSISDAO_H

#include <QObject>
#include <QVector>
#include <QMap>
#include <QVariant>
#include <QString>
#include <QDate>

class Database;

/**
 * @class SalesAnalysisDAO
 * @brief 销售分析数据访问层类
 * @details 负责从数据库获取销售分析相关的统计数据
 */
class SalesAnalysisDAO : public QObject
{
    Q_OBJECT

public:
    explicit SalesAnalysisDAO(Database *db, QObject *parent = nullptr);
    ~SalesAnalysisDAO();

    /**
     * @brief 获取销售图表数据（按月或按日）
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @param isMonthly true=按月统计，false=按日统计
     * @return 包含时间、销售额、毛利润的数据列表
     */
    QVector<QMap<QString, QVariant>> getSalesChartData(const QDate &startDate, const QDate &endDate, bool isMonthly = true);

    /**
     * @brief 获取销售分类统计数据
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 包含分类名称、销售额、销售数量的数据列表
     */
    QVector<QMap<QString, QVariant>> getCategorySalesData(const QDate &startDate, const QDate &endDate);

    /**
     * @brief 获取导购销售统计数据
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 包含导购姓名、销售额、订单数量的数据列表
     */
    QVector<QMap<QString, QVariant>> getStaffSalesData(const QDate &startDate, const QDate &endDate);

    /**
     * @brief 获取支付方式统计数据
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 包含支付方式、交易金额、交易次数的数据列表
     */
    QVector<QMap<QString, QVariant>> getPaymentMethodData(const QDate &startDate, const QDate &endDate);

    /**
     * @brief 获取指定分类的详细销售数据
     * @param categoryId 分类ID
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 该分类下商品的详细销售数据
     */
    QVector<QMap<QString, QVariant>> getCategoryDetailData(int categoryId, const QDate &startDate, const QDate &endDate);

private:
    Database *m_db;  ///< 数据库连接对象
};

#endif // SALESANALYSISDAO_H